package com.itcast.quartz.main;

import com.itcast.quartz.job.HelloJobListener;
import com.itcast.quartz.listener.MyJobListener;
import com.itcast.quartz.listener.MyTriggerListener;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.matchers.EverythingMatcher;
import org.quartz.impl.matchers.KeyMatcher;

/**
 * @author brian
 */
public class HelloSchedulerDemoTriggerListener {
    public static void main(String[] args) throws SchedulerException {
        //1.调度器（Scheduler），从工厂中获取调度的实例（默认实例化new StdSchedulerFactory();）
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

        //2.任务实例（JobDetail）
        // 加载任务类，与HelloJob完成绑定，要求HelloJob实现Job接口
        JobDetail jobDetail = JobBuilder.newJob(HelloJobListener.class)
                //参数1：任务的名称（唯一实例）；参数2：任务组的名称，可选，默认DEFAULT
                .withIdentity("job1", "group1")
                .build();

        //3.触发器（Trigger）
        Trigger trigger = TriggerBuilder.newTrigger()
                //参数1：触发器的名称（唯一实例）；参数2：触发器组的名称
                .withIdentity("trigger1", "group1")
                .startNow()
                //每5秒执行一次。interval要大于0，repeatCount从0开始
                .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(3).withRepeatCount(3))
                .build();

        //让调度器关联任务和触发器，保证按照触发器定义的条件执行任务
        scheduler.scheduleJob(jobDetail, trigger);

        //创建并注册一个全局的Trigger Listener
        //scheduler.getListenerManager().addTriggerListener(new MyTriggerListener("MyTriggerListener - HaHa"), EverythingMatcher.allTriggers());

        //创建并注册一个局部的Trigger Listener
        scheduler.getListenerManager().addTriggerListener(new MyTriggerListener("MyTriggerListener - HaHa"), KeyMatcher.keyEquals(TriggerKey.triggerKey("trigger1","group1")));
        
        //启动
        scheduler.start();

    }
}
